package Day_0218.DataType;

/**
 * @author zxc
 * @date 2023/02/18 14:48
 **/
public class Static_Variables {
    public static void main(String[] args) {
        /**
         * 静态变量，实例变量和普通变量之间的区别
         * ===》
         * 1.静态变量： （即，静态变量是属于类的;）
         * 静态变量不属于任何实例对象，属于类的，
         * 所以在内存中只会有一份，在类加载过程中，JVM只为静态变量分配一次内存空间。
         *
         * 2.实例变量： （即，实例变量是属于实例对象的;）
         * 每次创建对象，都会为每个对象分配 成员变量内存空间，
         * 实例变量是属于实例对象的，在内存中，创建几次对象，就有几份成员变量。
         *
         * 3.普通变量 ：
         * 非静态变量是对象所拥有的，在创建对象的时候被初始化，存在多个副本，各个对象拥有的副本互不影响。
         * 还有一点就是，static成员变量的初始化顺序，按照定义的顺序进行初始化。
         *
         */

        /**
         * 静态方法和实例方法之间的区别
         * ===》
         * 静态方法和实例方法的区别主要体现在两个方面：
         * 1.调用方法 ：
         * （1）在外部调用静态方法时，可以使用"类名.方法名"的方式，也可以使用"对象名.方法名"的方式。
         * （2）外部调用实例方法时，只能够使用"对象名.方法名"的方式。
         * ===》也就是说，调用静态方法可以无需创建对象。
         *
         * 2.所能够访问的成员变量和方法类型 ：
         * （1）静态方法在访问本类的成员时，只允许访问静态成员（即，静态成员变量和静态方法）;
         *  不允许访问实例成员变量和实例方法；
         * （2）实例方法，不仅仅可以访问实例成员变量和实例方法 && 同时也可以访问静态成员（即，静态成员变量和静态方法）;
         *
         */

        /**
         * 在一个静态方法内调用一个非静态成员为什么是非法的？
         * ===》
         * （1）由于静态方法可以不通过对象进行调用，
         *  ===》
         *  即，若是静态方法未通过对象进行调用，同时非静态成员又是依赖于实例对象的，所以会出现报错;
         *
         * （2）因此在静态方法里，不能调用其他非静态变量，也不可以访问非静态变量成员。
         *
         */
    }
}
